// const presets = [];
// const plugins = [];

// const presets = [];
// const plugins = ["@babel/plugin-transform-arrow-functions"];

// 引入@babel/preset-env，能够做到转义箭头函数 var class这样的语法糖
// 但是没有ployfill，像includes方法，Map等无法转化
// 没有设置useBuiltIns,相当于设置了false
// const plugins = [];
// const presets = [["@babel/preset-env"]];

// 开始加入useBuiltIns配置。
// 1.并指定corejs版本，并安装 npm install --save core-js@3
// 2.在入口文件处自己引入corejs require('core-js')
// 这样打包之后的代码中就会有很多类似require("core-js/modules/es.symbol.js");这样的代码
// 相当于将所有的垫片全部引入了
// 这样的优点是全局彻底ployfill，就算 node_modules 中的依赖存在不兼容的代码，也能成功运行，缺点也很明显，引入过多不必要的代码
// const plugins = [];
// const presets = [
//   [
//     "@babel/preset-env",
//     {
//       useBuiltIns: "entry",
//       corejs: 3,
//     },
//   ],
// ];

// 设置useBuiltIns为，顾名思义为按需引入
// 优点很明显，无需引入过多不必要代码，但是无法处理node_modules中内容
// const plugins = [];
// const presets = [
//   [
//     "@babel/preset-env",
//     {
//       useBuiltIns: "usage",
//       corejs: 3,
//     },
//   ],
// ];

// 同时还有个targets选项，选择我们的目标浏览器
// 默认规则为 > 0.5%, last 2 versions, Firefox ESR, not dead
// 假设我设置为高版本的浏览器，那么他就不会增加垫片内容
// const plugins = [];
// const presets = [
//   [
//     "@babel/preset-env",
//     {
//       useBuiltIns: "usage",
//       corejs: 3,
//       // 这个是blockCli的配置
//       // "targets": {
//       //   "browsers": ["last 4 versions", "ie >= 9", "safari >= 10"] // "last 2 Chrome versions",
//       // },
//       targets: {
//         // 设置为97 那么async这种都会被保留。如果是30那么久不会保留
//         chrome: 97,
//       },
//     },
//   ],
// ];

// 一般项目中的配置如下。
// 此时存在两个问题。第一他改变了全局方法，比如在Array.prototype上增加了includes方法，这样显然不是很合理
// 第二增加了_createClass这样的辅助函数。但是如果是多个文件，那么就会创建多个辅助函数，这样显然也是不合理的
// @babel/plugin-transform-runtime正是解决了这两个问题
// corejs有2 3版本，一般建议选3版本。新特性都在3中支持。2的分支已经冻结。
const presets = [
  [
    "@babel/preset-env",
    {
      useBuiltIns: "usage",
      corejs: 3,
    },
  ],
];
const plugins = [
  [
    "@babel/plugin-transform-runtime",
    {
      regenerator: false,
      corejs: 3, // 指定 runtime-corejs 的版本，目前有 2 3 两个版本。不设置。默认false。那么就无法做到避免污染全局环境了
    },
  ],
];

module.exports = { presets, plugins };

// useBuiltIns默认false，需要自己在入口文件增加 require('core-js')代码。
// 所以有时候控制台会打印出ReferenceError: regeneratorRuntime is not defined这样的信息
// 是因为没有配置useBuiltIns，并且入口没有引入core-js
// 打包出来的代码中含有require("core-js/modules/es.promise.js");这样的代码，是因为安装@babel/preset-env时自动安装了corejs
